initial add - go fmt on grpc

Change-Id: Ib0afadd2fe5571d1456a091f94f5644458f7d3f4
diff --git a/grpc/client.go b/grpc/client.go
new file mode 100644
index 0000000..acb2304
--- /dev/null
+++ b/grpc/client.go
@@ -0,0 +1,101 @@
+/*
+   Copyright 2017 the original author or authors.
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+*/
+
+package grpc
+
+import (
+	"context"
+	"time"
+
+	"github.com/golang/protobuf/ptypes/empty"
+
+	"github.com/opencord/ofagent-go/openflow"
+
+	"fmt"
+	"log"
+
+	pb "github.com/opencord/voltha-protos/go/voltha"
+	"google.golang.org/grpc"
+)
+
+var client pb.VolthaServiceClient
+var clientMap map[string]*openflow.Client
+var ofAddress string
+var ofPort uint16
+
+func StartClient(endpointAddress string, endpointPort uint16, openFlowAddress string, openFlowPort uint16) {
+	ofAddress = openFlowAddress
+	ofPort = openFlowPort
+	clientMap = make(map[string]*openflow.Client)
+	var opts []grpc.DialOption
+	opts = append(opts, grpc.WithInsecure())
+	endpoint := fmt.Sprintf("%s:%d", endpointAddress, endpointPort)
+	conn, err := grpc.Dial(endpoint, opts...)
+	defer conn.Close()
+	if err != nil {
+		log.Fatalf("fail to dial: %v", err)
+	}
+	client = pb.NewVolthaServiceClient(conn)
+
+	go receivePacketIn(client)
+	go receiveChangeEvent(client)
+	go streamPacketOut(client)
+
+	openflow.SetGrpcClient(&client)
+	for {
+		log.Println("entering device refresh pull")
+		deviceList, err := client.ListLogicalDevices(context.Background(), &empty.Empty{})
+		if err != nil {
+			log.Printf("ERROR GET DEVICE LIST %v", err)
+		}
+		devices := deviceList.GetItems()
+		refreshDeviceList(devices)
+		time.Sleep(time.Minute)
+		log.Println("waking up")
+	}
+}
+func refreshDeviceList(devices []*pb.LogicalDevice) {
+	//first find the new ones
+	var toAdd []string
+	var toDel []string
+	var deviceIdMap = make(map[string]string)
+	for i := 0; i < len(devices); i++ {
+		log.Printf("Device ID %s", devices[i].GetId())
+		deviceId := devices[i].GetId()
+		deviceIdMap[deviceId] = deviceId
+		if clientMap[deviceId] == nil {
+			toAdd = append(toAdd, deviceId)
+		}
+	}
+	for key, _ := range clientMap {
+		if deviceIdMap[key] == "" {
+			toDel = append(toDel, key)
+		}
+	}
+	for i := 0; i < len(toAdd); i++ {
+		var client = addClient(toAdd[i])
+		go client.Start()
+	}
+	for i := 0; i < len(toDel); i++ {
+		clientMap[toDel[i]].End()
+		delete(clientMap, toDel[i])
+	}
+}
+func addClient(deviceId string) *openflow.Client {
+	client := openflow.NewClient(ofAddress, ofPort, deviceId, true)
+	clientMap[deviceId] = client
+	return client
+}