| 47 | } |
| 48 | |
| 49 | func (p *CalculatorHandler) Calculate(ctx context.Context, logid int32, w *tutorial.Work) (val int32, err error) { |
| 50 | fmt.Print("calculate(", logid, ", {", w.Op, ",", w.Num1, ",", w.Num2, "})\n") |
| 51 | switch w.Op { |
| 52 | case tutorial.Operation_ADD: |
| 53 | val = w.Num1 + w.Num2 |
| 54 | case tutorial.Operation_SUBTRACT: |
| 55 | val = w.Num1 - w.Num2 |
| 56 | case tutorial.Operation_MULTIPLY: |
| 57 | val = w.Num1 * w.Num2 |
| 58 | case tutorial.Operation_DIVIDE: |
| 59 | if w.Num2 == 0 { |
| 60 | ouch := tutorial.NewInvalidOperation() |
| 61 | ouch.WhatOp = int32(w.Op) |
| 62 | ouch.Why = "Cannot divide by 0" |
| 63 | err = ouch |
| 64 | return |
| 65 | } |
| 66 | val = w.Num1 / w.Num2 |
| 67 | default: |
| 68 | ouch := tutorial.NewInvalidOperation() |
| 69 | ouch.WhatOp = int32(w.Op) |
| 70 | ouch.Why = "Unknown operation" |
| 71 | err = ouch |
| 72 | return |
| 73 | } |
| 74 | entry := shared.NewSharedStruct() |
| 75 | entry.Key = logid |
| 76 | entry.Value = strconv.Itoa(int(val)) |
| 77 | k := int(logid) |
| 78 | /* |
| 79 | oldvalue, exists := p.log[k] |
| 80 | if exists { |
| 81 | fmt.Print("Replacing ", oldvalue, " with ", entry, " for key ", k, "\n") |
| 82 | } else { |
| 83 | fmt.Print("Adding ", entry, " for key ", k, "\n") |
| 84 | } |
| 85 | */ |
| 86 | p.log[k] = entry |
| 87 | return val, err |
| 88 | } |
| 89 | |
| 90 | func (p *CalculatorHandler) GetStruct(ctx context.Context, key int32) (*shared.SharedStruct, error) { |
| 91 | fmt.Print("getStruct(", key, ")\n") |